package com.example.study2.Constructor;

/**
 * 默认初始化示例
 * 默认初始化发生在对象创建时
 */
public class Date {
    // 成员变量 - 可以不显式初始化
    public int year;
    public int month;
    public int day;

    public Date(int year, int month, int day) {
        // 成员变量在定义时没有给初始值，但可以使用
        System.out.println("year: " + this.year);    // 输出：year: 0
        System.out.println("month: " + this.month);  // 输出：month: 0
        System.out.println("day: " + this.day);      // 输出：day: 0

        // 然后再用参数值覆盖默认值
        this.year = year;
        this.month = month;
        this.day = day;


        // 再打印覆盖后的值
        System.out.println("赋值后\nyear: " + this.year);    // 输出：year: 1945
        System.out.println("month: " + this.month);           // 输出：month: 9
        System.out.println("day: " + this.day);               // 输出：day: 2
    }

    public static void main(String[] args) {
        // 局部变量必须初始化，否则编译错误
        // int a;
        // System.out.println(a); // 错误：可能尚未初始化变量a

        int a = 10;  // 正确：局部变量需要显式初始化
        System.out.println(a);

        Date d = new Date(1945, 9, 2);
    }
}

/*
运行结果：
        10
        year: 0
        month: 0
        day: 0
        赋值后
        year: 1945
        month: 9
        day: 2
*/
